/**
*   Author:
*       Kistner Kevin
*/
#include "Kugel.h"
#include "Spielfeld.h"
#include <math.h>
#include <time.h>

#ifndef EIGENEPHYSIK_H
#define EIGENEPHYSIK_H
class Spielfeld;
class Kugel;

class EigenePhysik{
private:
    int rps = 120;
    double start = 0.0, rechenschritt = 0.0;
    clock_t endwait;
    int kugelanzahl;
    int loecherAktiv;
    float loch [6][2];
    float lochradius;
    Spielfeld spielfeld;
    Kugel *kugel;
    float kollisionsvektorErsteK[2];
    float kollisionsvektorZweiteK[2];
    float orthogonalerVektorErsteK[2];
    float orthogonalerVektorZweiteK[2];
    float multiplikatorOVektorAltErsteK = -100.0f;
    float multiplikatorKVektorAltErsteK = -100.0f;
    float multiplikatorOVektorAltZweiteK = -101.0f;
    float multiplikatorKVektorAltZweiteK = -101.0f;
    void init(int pKugelAnzahl, float pKugelRadius, float pXLinks, float pXRechts, float pYOben, float pYUnten);
    void berechneWandKollision();
    void berechneKugelKollision();
    void pruefeKugelVersenkt();
    void berechneNaechsteKoordinaten();
    void berechneKollisionsrichtung(int ersteKugelNr, int zweiteKugelNr);
    void berechneVectoren(int ersteKugelNr, int zweiteKugelNr);
public:
    //EigenePhysik();
    EigenePhysik(int pKugelAnzahl = 2);
    EigenePhysik(int pKugelAnzahl, float pKugelRadius, float pXLinks, float pXRechts, float pYOben, float pYUnten);
    EigenePhysik(int pKugelAnzahl, float pKugelRadius, float pXLinks, float pXRechts, float pYOben, float pYUnten, float pLochradius);
    ~EigenePhysik();
    void berechneNaechstesBild();
    //testMethoden:
    void SetzeKugelKoordinaten(int pKugelNr, float pKugelXPos, float pKugelYPos);
    void SetzeKugelInBewegung(int pKugelNr, float pKugelXStaerke, float pKugelYStaerke);
    float holeXStaerkeVonKugel(int pKugelNr);
    float holeYStaerkeVonKugel(int pKugelNr);
    float holeXPosVonKugel(int pKugelNr);
    float holeYPosVonKugel(int pKugelNr);
    float eigenesABS(float pwert);
    int holeAktivVonKugel(int pKugelNr);
    void setzeKugelAktiv(int pKugelNr);
    void setzeKugelInaktiv(int pKugelNr);
    void setzeKugel(int pKugelNr, float xPos, float yPos, float xStaerke, float yStaerke, float aktiv);
};

#endif
